#include "graph-node.h"
#include "meta-types.h"
#include "section-descendant-model.h"
#include "section-info.h"

SectionDescendantModel::SectionDescendantModel(QObject *parent) :
    QAbstractListModel(parent), m_sectionNode(0)
{
}

const GraphNode<SectionInfo> *SectionDescendantModel::sectionNode() const
{
    return m_sectionNode;
}

GraphNode<SectionInfo> *SectionDescendantModel::sectionNode()
{
    return m_sectionNode;
}

void SectionDescendantModel::initialize()
{
    beginResetModel();
    m_descendants = m_sectionNode->childNodes();
    endResetModel();
}

void SectionDescendantModel::setSectionNode(GraphNode<SectionInfo> *sectionNode)
{
    m_sectionNode = sectionNode;
}

int SectionDescendantModel::rowCount(const QModelIndex &parent) const
{
    if (parent.isValid())
        return 0;
    return m_descendants.size();
}

QVariant SectionDescendantModel::data(const QModelIndex &index, int role) const
{
    if (!index.isValid())
        return QVariant();

    switch (role)
    {
    case Qt::DisplayRole:
        return m_descendants.at(index.row())->data().description();
    case Qt::UserRole:
    {
        return QVariant::fromValue(m_descendants.at(index.row()));
    }
    default:
        return QVariant();
    }
}

QVariant SectionDescendantModel::headerData(int section, Qt::Orientation orientation, int role) const
{
    if (orientation == Qt::Vertical || section != 0 || role != Qt::DisplayRole)
        return QVariant();

    return "Następna sekcja";
}
